from langchain.prompts import (
    ChatPromptTemplate,
    HumanMessagePromptTemplate,
    MessagesPlaceholder,
)
from langchain_core.messages import HumanMessage, AIMessage
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv, find_dotenv
# 定义用户的prompt，将问题的答案翻译成日文
human_prompt = "Translate your answer to {language}."
# 创建一个用户消息模版
human_message_template = HumanMessagePromptTemplate.from_template(human_prompt)
# 创建一个对话模版,对话模版需要通过MessagesPlaceholder方式传入参数，参数名称为conversation
# 并且将用户上面的prompt问题也加入到列表中
chat_prompt = ChatPromptTemplate.from_messages(
    # variable_name 是 message placeholder 在模板中的变量名
    # 用于在赋值时使用
    [MessagesPlaceholder(variable_name="conversation"), human_message_template]
)
# 定义上面的答案的问题，下面的问的是谁是马斯克，ai消息封装的就是答案
human_message = HumanMessage(content="Who is Elon Musk?")
ai_message = AIMessage(content="Elon Musk is a billionaire entrepreneur, inventor, and industrial designer")
# 通过上面定义的消息模版进行格式化，将定义好的human_message和ai（答案）的消息传入上面的conversation
message = chat_prompt.format_prompt(
    conversation=[human_message, ai_message], language="日文"
)
# 打印格式化后的消息，这个消息就类似于之前的案例《多轮对话 Session 封装.py》中的message对象列表
print(message.to_messages())
# 加载 .env 到环境变量
_ = load_dotenv(find_dotenv())
llm = ChatOpenAI(model="gpt-3.5-turbo")  # 默认是gpt-3.5-turbo
res = llm.invoke(message)
print(res.content)
